﻿using Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Parcial1
{
    public partial class FormPrincipal : Form
    {
        //----------------------Todos-------------------------------------------------

        public void SelectItemByValue(ComboBox cbo, string value)
        {
            for (int i = 0; i < cbo.Items.Count; i++)
            {
                var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
                if (prop != null && prop.GetValue(cbo.Items[i], null).ToString() == value)
                {
                    cbo.SelectedIndex = i;
                    break;
                }
            }
        }

        public FormPrincipal()
        {
            InitializeComponent();
            parametro = new ParametroNegocio();
            tipoCliente = new TipoClienteNegocio();
            cliente = new ClienteNegocio();

            CargarFormularioParametros();
            CargarFormularioClientes();
        }
        //---------------------Parametros---------------------------------------------
        ParametroNegocio parametro;
        List<bool> swParametros = new List<bool>(){false,false,false};

        private void DeshabilitarFormParametros()
        {
            txtparaCodigo.Enabled = false;
            txtparaDescripcion.Enabled = false;
            txtparaNombre.Enabled = false;
            txtparaValor.Enabled = false;

            tsbparCancelar.Enabled = false;
            tsbparGuardar.Enabled = false;

            swParametros[0] = false;
            swParametros[1] = false;
            swParametros[2] = false;
        }

        private void HabilitarFormParametros()
        {
            if (swParametros.ElementAt(0))
            {
                txtparaDescripcion.Enabled = true;
                txtparaNombre.Enabled = true;
                txtparaValor.Enabled = true;
            }
            else if (swParametros.ElementAt(1))
            {
                txtparaValor.Enabled = true;
            }
            else if (swParametros.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarParametros()
        {
            List<dynamic> result = new List<dynamic>();
            var list = parametro.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.paraCodigo, Nombre = item.paraNombre, Valor = item.paraValor, Descripcion = item.paraDescripcion });
            }

            return result;
        }

        private void CargarFormularioParametros()
        {
            gridParametros.DataSource = ListarParametros();
        }

        private void gridParametros_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            tsbparEliminar.Enabled = true;
            tsbparEditar.Enabled = true;
            foreach (DataGridViewRow select in gridParametros.SelectedRows)
            {
                txtparaCodigo.Text = select.Cells[0].Value.ToString();
                txtparaNombre.Text = select.Cells[1].Value.ToString();
                txtparaValor.Text = select.Cells[2].Value.ToString();
                txtparaDescripcion.Text = select.Cells[3].Value.ToString();
            }
        }

        private void tsbparNuevo_Click(object sender, EventArgs e)
        {
            swParametros[0] = true;
            swParametros[1] = false;
            swParametros[2] = false;

            txtparaCodigo.Text = "0";
            txtparaDescripcion.Text = "";
            txtparaNombre.Text = "";
            txtparaValor.Text = "";

            HabilitarFormParametros();
            tsbparEliminar.Enabled = false;
            tsbparEditar.Enabled = false;
            tsbparGuardar.Enabled = true;
            tsbparCancelar.Enabled = true;
        }

        private void tsbparEditar_Click(object sender, EventArgs e)
        {
            swParametros[0] = false;
            swParametros[1] = true;
            swParametros[2] = false;

            HabilitarFormParametros();
            tsbparGuardar.Enabled = true;
            tsbparCancelar.Enabled = true;
        }

        private void tsbparEliminar_Click(object sender, EventArgs e)
        {
            swParametros[0] = false;
            swParametros[1] = false;
            swParametros[2] = true;

            tsbparGuardar_Click(sender, e);

            //HabilitarFormParametros();
            //tsbparGuardar.Enabled = true;
            //tsbparCancelar.Enabled = true;
        }

        private void tsbparCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormParametros();
            tsbparEliminar.Enabled = false;
            tsbparEditar.Enabled = false;
        }

        private void gridParametros_SelectionChanged(object sender, EventArgs e)
        {
            tsbparEliminar.Enabled = true;
            tsbparEditar.Enabled = true;
            foreach (DataGridViewRow select in gridParametros.SelectedRows)
            {
                txtparaCodigo.Text = select.Cells[0].Value.ToString();
                txtparaNombre.Text = select.Cells[1].Value.ToString();
                txtparaValor.Text = select.Cells[2].Value.ToString();
                txtparaDescripcion.Text = select.Cells[3].Value.ToString();
            }
        }

        private void tsbparGuardar_Click(object sender, EventArgs e)
        {
            if (swParametros.ElementAt(0))
            {
                parametro = new ParametroNegocio();

                parametro.setDescripcion(txtparaDescripcion.Text);
                parametro.setNombre(txtparaNombre.Text);
                parametro.setValor(txtparaValor.Text);

                if (parametro.Guardar())
                {
                    MessageBox.Show("Exito al Guardar", "Parametro");
                }
                else
                {
                    MessageBox.Show("Error al Guardar", "Parametro");
                }
            }
            else if (swParametros.ElementAt(1))
            {
                int codigo = Int32.Parse(txtparaCodigo.Text);
                string valor = txtparaValor.Text;

                if (parametro.Actualizar(codigo, valor))
                {
                    MessageBox.Show("Exito al Actualizar", "Parametro");
                }
                else
                {
                    MessageBox.Show("Error al Actualizar", "Parametro");
                }
            }
            else if (swParametros.ElementAt(2))
            {
                int codigo = Int32.Parse(txtparaCodigo.Text);

                if (parametro.Eliminar(codigo))
                {
                    MessageBox.Show("Exito al Eliminar", "Parametro");
                }
                else
                {
                    MessageBox.Show("Error al Eliminar", "Parametro");
                }
            }

            gridParametros.DataSource = ListarParametros();
            DeshabilitarFormParametros();

        }

        //---------------------Cliente------------------------------------------------
        TipoClienteNegocio tipoCliente;
        List<bool> swTipoClientes = new List<bool>() { false, false, false };

        ClienteNegocio cliente;
        List<bool> swClientes = new List<bool>() { false, false, false };

        private void DeshabilitarFormClientes()
        {
            txtcliNombre.Enabled = false;
            txtcliNIT.Enabled = false;
            txtcliDireccion.Enabled = false;
            cbbcliTipoCliente.Enabled = false;

            tsbcliCancelar.Enabled = false;
            tsbcliGuardar.Enabled = false;

            swClientes[0] = false;
            swClientes[1] = false;
            swClientes[2] = false;
        }

        private void HabilitarFormClientes()
        {
            if (swClientes.ElementAt(0))
            {
                txtcliNombre.Enabled = true;
                txtcliNIT.Enabled = true;
                txtcliDireccion.Enabled = true;
                cbbcliTipoCliente.Enabled = true;
            }
            else if (swClientes.ElementAt(1))
            {
                txtcliNombre.Enabled = true;
                txtcliNIT.Enabled = true;
                txtcliDireccion.Enabled = true;
                cbbcliTipoCliente.Enabled = true;
            }
            else if (swClientes.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarClientes()
        {
            List<dynamic> result = new List<dynamic>();
            var list = cliente.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.cliCodigo, NombreCompleto = item.cliNombreCompleto, NIT = item.cliNIT, Direccion = item.cliDireccion, TipoCliente = item.cliTipoCliente });
            }

            return result;
        }

        private void CargarFormularioClientes()
        {
            var list = ListarClientes();
            gridClientes.DataSource = list;
            if (list.Count > 0)
            {
                gridClientes.Columns["TipoCliente"].Visible = false;
            }
            var listTipos = tipoCliente.Listar();
            List<dynamic> result = new List<dynamic>();

            foreach (var item in listTipos)
            {
                result.Add(new { Codigo = item.tcliCodigo, Descripcion = item.tcliDescripcion });
            }

            cbbcliTipoCliente.DataSource = result;
            cbbcliTipoCliente.DisplayMember = "Descripcion";
            cbbcliTipoCliente.ValueMember = "Codigo";
        }

        private void tsbcliNuevo_Click(object sender, EventArgs e)
        {
            swClientes[0] = true;
            swClientes[1] = false;
            swClientes[2] = false;

            txtcliCodigo.Text = "0";
            txtcliNombre.Text = "";
            txtcliDireccion.Text = "";
            txtcliNIT.Text = "";
            cbbcliTipoCliente.SelectedIndex = 0;

            HabilitarFormClientes();

            tsbcliEliminar.Enabled = false;
            tsbcliEditar.Enabled = false;
            tsbcliGuardar.Enabled = true;
            tsbcliCancelar.Enabled = true;
        }

        private void tsbcliEditar_Click(object sender, EventArgs e)
        {
            swClientes[0] = false;
            swClientes[1] = true;
            swClientes[2] = false;

            HabilitarFormClientes();

            tsbcliGuardar.Enabled = true;
            tsbcliCancelar.Enabled = true;
        }

        private void tsbcliEliminar_Click(object sender, EventArgs e)
        {
            swClientes[0] = false;
            swClientes[1] = false;
            swClientes[2] = true;

            tsbcliGuardar_Click(sender, e);
        }

        private void tsbcliGuardar_Click(object sender, EventArgs e)
        {
            if (swClientes.ElementAt(0))
            {
                cliente = new ClienteNegocio();

                cliente.setNombreCompleto(txtcliNombre.Text);
                cliente.setNIT(txtcliNIT.Text);
                cliente.setDireccion(txtcliDireccion.Text);
                string s = cbbcliTipoCliente.SelectedValue.ToString();
                cliente.setTipoCliente(Int32.Parse(s));

                if (cliente.Guardar())
                {
                    MessageBox.Show("Exito al Guardar", "Cliente");
                }
                else
                {
                    MessageBox.Show("Error al Guardar", "Cliente");
                }
            }
            else if (swClientes.ElementAt(1))
            {
                int codigo = Int32.Parse(txtcliCodigo.Text);
                string NombreCompleto = txtcliNombre.Text;
                string NIT = txtcliNIT.Text;
                string Direccion = txtcliDireccion.Text;
                string s = cbbcliTipoCliente.SelectedValue.ToString();
                int TipoCliente = Int32.Parse(s);

                if (cliente.Actualizar(codigo, NombreCompleto, NIT, Direccion, TipoCliente))
                {
                    MessageBox.Show("Exito al Actualizar", "Cliente");
                }
                else
                {
                    MessageBox.Show("Error al Actualizar", "Cliente");
                }
            }
            else if (swClientes.ElementAt(2))
            {
                int codigo = Int32.Parse(txtcliCodigo.Text);

                if (cliente.Eliminar(codigo))
                {
                    MessageBox.Show("Exito al Eliminar", "Cliente");
                }
                else
                {
                    MessageBox.Show("Error al Eliminar", "Cliente");
                }
            }

            var list = ListarClientes();
            gridClientes.DataSource = list;
            if (list.Count > 0)
            {
                gridClientes.Columns["TipoCliente"].Visible = false;
            }
            DeshabilitarFormClientes();
        }

        private void tsbcliCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormClientes();
            tsbcliEliminar.Enabled = false;
            tsbcliEditar.Enabled = false;
        }

        private void gridClientes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            tsbcliEliminar.Enabled = true;
            tsbcliEditar.Enabled = true;
            foreach (DataGridViewRow select in gridClientes.SelectedRows)
            {
                txtcliCodigo.Text = select.Cells[0].Value.ToString();
                txtcliNombre.Text = select.Cells[1].Value.ToString();
                txtcliNIT.Text = select.Cells[2].Value.ToString();
                txtcliDireccion.Text = select.Cells[3].Value.ToString();
                SelectItemByValue(cbbcliTipoCliente, select.Cells[4].Value.ToString());
            }
        }

        private void gridClientes_SelectionChanged(object sender, EventArgs e)
        {
            tsbcliEliminar.Enabled = true;
            tsbcliEditar.Enabled = true;
            foreach (DataGridViewRow select in gridClientes.SelectedRows)
            {
                txtcliCodigo.Text = select.Cells[0].Value.ToString();
                txtcliNombre.Text = select.Cells[1].Value.ToString();
                txtcliNIT.Text = select.Cells[2].Value.ToString();
                txtcliDireccion.Text = select.Cells[3].Value.ToString();
                SelectItemByValue(cbbcliTipoCliente, select.Cells[4].Value.ToString());
            }
        }

        //--------------------Proovedor-----------------------------------------------
        ProveedorNegocio proveedor;
        List<bool> swProveedores = new List<bool>() { false, false, false };

        private void DeshabilitarFormProveedores()
        {
            txtprovCodigo.Enabled = false;
            txtprovDireccion.Enabled = false;
            txtprovNombre.Enabled = false;
            

            tsbprovCancelar.Enabled = false;
            tsbprovGuardar.Enabled = false;

            swProveedores[0] = false;
            swProveedores[1] = false;
            swProveedores[2] = false;
        }

        private void HabilitarFormProveedores()
        {
            if (swProveedores.ElementAt(0))
            {
                txtprovDireccion.Enabled = true;
                txtprovNombre.Enabled = true;
            }
            else if (swProveedores.ElementAt(1))
            {
                txtprovDireccion.Enabled = true;
                txtprovNombre.Enabled = true;
            }
            else if (swProveedores.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarProveedores()
        {
            List<dynamic> result = new List<dynamic>();
            var list = proveedor.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.provCodigo, NombreCompleto = item.provNombre, Direccion = item.provDireccion });
            }

            return result;
        }

        private void CargarFormularioProveedores()
        {
            var list = ListarProveedores();
            gridProovedores.DataSource = list;

        }
        private void tsbprovNuevo_Click(object sender, EventArgs e)
        {
            swProveedores[0] = true;
            swProveedores[1] = false;
            swProveedores[2] = false;

            txtprovCodigo.Text = "0";
            txtprovNombre.Text = "";
            txtprovDireccion.Text = "";
            
            HabilitarFormProveedores();

            tsbprovEliminar.Enabled = false;
            tsbprovEditar.Enabled = false;
            tsbprovGuardar.Enabled = true;
            tsbprovCancelar.Enabled = true;
        }

        private void tsbprovEditar_Click(object sender, EventArgs e)
        {
            swProveedores[0] = false;
            swProveedores[1] = true;
            swProveedores[2] = false;

            HabilitarFormProveedores();

            tsbprovGuardar.Enabled = true;
            tsbprovCancelar.Enabled = true;
        }

        private void tsbprovEliminar_Click(object sender, EventArgs e)
        {
            swProveedores[0] = false;
            swProveedores[1] = false;
            swProveedores[2] = true;

            tsbprovGuardar_Click(sender, e);
        }

        private void tsbprovGuardar_Click(object sender, EventArgs e)
        {
            if (swProveedores.ElementAt(0))
            {
                proveedor = new ProveedorNegocio();

                proveedor.setNombre(txtprovNombre.Text);
                proveedor.setDireccion(txtprovDireccion.Text);

                if (proveedor.Guardar())
                {
                    MessageBox.Show("Exito al Guardar", "Proveedor");
                }
                else
                {
                    MessageBox.Show("Error al Guardar", "Proveedor");
                }
            }
            else if (swProveedores.ElementAt(1))
            {
                int codigo = Int32.Parse(txtprovCodigo.Text);
                string Nombre = txtprovNombre.Text;
                string Direccion = txtprovDireccion.Text;
                

                if (proveedor.Actualizar(codigo, Nombre, Direccion))
                {
                    MessageBox.Show("Exito al Actualizar", "Proveedor");
                }
                else
                {
                    MessageBox.Show("Error al Actualizar", "Proveedor");
                }
            }
            else if (swProveedores.ElementAt(2))
            {
                int codigo = Int32.Parse(txtprovCodigo.Text);

                if (proveedor.Eliminar(codigo))
                {
                    MessageBox.Show("Exito al Eliminar", "Proveedor");
                }
                else
                {
                    MessageBox.Show("Error al Eliminar", "Proveedor");
                }
            }

            var list = ListarProveedores();
            gridProovedores.DataSource = list;

            DeshabilitarFormProveedores();

        }

        private void tsbprovCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormProveedores();
            tsbprovEditar.Enabled = false;
            tsbprovEliminar.Enabled = false;
        }

        private void gridProovedores_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            tsbprovEliminar.Enabled = true;
            tsbprovEditar.Enabled = true;
            foreach (DataGridViewRow select in gridParametros.SelectedRows)
            {
                txtprovCodigo.Text = select.Cells[0].Value.ToString();
                txtprovNombre.Text = select.Cells[1].Value.ToString();
                txtprovDireccion.Text = select.Cells[2].Value.ToString();
            }
        }
    
    
        private void gridProovedores_SelectionChanged(object sender, EventArgs e)
        {
            tsbprovEliminar.Enabled = true;
            tsbprovEditar.Enabled = true;
            foreach (DataGridViewRow select in gridParametros.SelectedRows)
            {
                txtprovCodigo.Text = select.Cells[0].Value.ToString();
                txtprovNombre.Text = select.Cells[1].Value.ToString();
                txtprovDireccion.Text = select.Cells[2].Value.ToString();
            }
        }
        //------------------------------Empleado--------------------------------------
        EmpleadoNegocio empleado;
        List<bool> swEmpleados= new List<bool>() { false, false, false };

        private void DeshabilitarFormEmpleados()
        {
            txtempCodigo.Enabled = false;
            txtempNombre.Enabled = false;
            txtempUsuario.Enabled = false;
            txtempPassword.Enabled = false;
            txtempCPassword.Enabled = false;


            tsbempCancelar.Enabled = false;
            tsbempGuardar.Enabled = false;

            swEmpleados[0] = false;
            swEmpleados[1] = false;
            swEmpleados[2] = false;
        }

        private void HabilitarFormEmpleados()
        {
            if (swProveedores.ElementAt(0))
            {
                txtempNombre.Enabled = true;
                txtempUsuario.Enabled = true;
                txtempPassword.Enabled = true;
                txtempCPassword.Enabled = true;
            }
            else if (swProveedores.ElementAt(1))
            {
                txtempPassword.Enabled = false;
                txtempCPassword.Enabled = false;
            }
            else if (swProveedores.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarEmpleados()
        {
            List<dynamic> result = new List<dynamic>();
            var list = empleado.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.emCodigo, NombreCompleto = item.emNombreCompleto, Usuario = item.emUsuario});
            }

            return result;
        }

        private void CargarFormularioEmpleados()
        {
            var list = ListarEmpleados();
            gridEmpleados.DataSource = list;

        }

        private void tsbempNuevo_Click(object sender, EventArgs e)
        {
            HabilitarFormEmpleados();

            txtempNombre.Text = "";
            txtempUsuario.Text = "";
            txtempPassword.Text = "";
            txtempCPassword.Text = "";

            swEmpleados[0] = true;
            swEmpleados[1] = false;
            swEmpleados[2] = false;

            tsbempEditar.Enabled = false;
            tsbempEliminar.Enabled = false;
            tsbempGuardar.Enabled = true;
            tsbempCancelar.Enabled = true;

        }

        private void tsbempEditar_Click(object sender, EventArgs e)
        {
            HabilitarFormEmpleados();

            swEmpleados[0] = false;
            swEmpleados[1] = true;
            swEmpleados[2] = false;

            tsbempGuardar.Enabled = true;
            tsbempCancelar.Enabled = true;
        }

        private void tsbempEliminar_Click(object sender, EventArgs e)
        {
            HabilitarFormEmpleados();

            swEmpleados[0] = false;
            swEmpleados[1] = false;
            swEmpleados[2] = true;

            tsbempGuardar_Click(sender, e);
        }

        private void tsbempGuardar_Click(object sender, EventArgs e)
        {
            if (swEmpleados.ElementAt(0))
            {
                empleado = new EmpleadoNegocio();

                empleado.setNombre(txtempNombre.Text);
                empleado.setUsuario(txtempNombre.Text);
                empleado.setPassword(txtempPassword.Text);

                if (empleado.Guardar())
                {
                    MessageBox.Show("Exito al Guardar", "Empleado");
                }
                else
                {
                    MessageBox.Show("Error al Guardar", "Empleado");
                }
            }
            else if (swEmpleados.ElementAt(1))
            {
                int codigo = Int32.Parse(txtempCodigo.Text);
                string Nombre = txtempNombre.Text;
                string Usuario = txtempUsuario.Text;
                string Password = txtempPassword.Text;


                if (empleado.Actualizar(codigo, Nombre,Usuario,Password))
                {
                    MessageBox.Show("Exito al Actualizar", "Empleado");
                }
                else
                {
                    MessageBox.Show("Error al Actualizar", "Empleado");
                }
            }
            else if (swEmpleados.ElementAt(2))
            {
                int codigo = Int32.Parse(txtempCodigo.Text);

                if (empleado.Eliminar(codigo))
                {
                    MessageBox.Show("Exito al Eliminar", "Empleado");
                }
                else
                {
                    MessageBox.Show("Error al Eliminar", "Empleado");
                }
            }

            var list = ListarEmpleados();
            gridEmpleados.DataSource = list;

            DeshabilitarFormEmpleados();
        }

        private void tsbempCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormEmpleados();
            tsbempEditar.Enabled = false;
            tsbempEliminar.Enabled = false;
        }
        //------------------Producto---------------------------------------

        ProductoNegocio producto;
        List<bool> swProductos = new List<bool>() { false, false, false };

        private void DeshabilitarFormProductos()
        {
            txtprodCodigo.Enabled = false;
            txtprodNombre.Enabled = false;
            txtprodPrecio.Enabled = false;

            tsbprodCancelar.Enabled = false;
            tsbprodGuardar.Enabled = false;

            swProductos[0] = false;
            swProductos[1] = false;
            swProductos[2] = false;
        }

        private void HabilitarFormProductos()
        {
            if (swProductos.ElementAt(0))
            {
                txtprodNombre.Enabled = true;
                txtprodPrecio.Enabled = true;
            }
            else if (swProductos.ElementAt(1))
            {
                txtprodNombre.Enabled = true;
                txtprodPrecio.Enabled = true;
            }
            else if (swProductos.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarProductos()
        {
            List<dynamic> result = new List<dynamic>();
            var list = producto.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.prodCodigo, NombreCompleto = item.prodNombre, Precio = item.prodPrecio});
            }

            return result;
        }

        private void CargarFormularioProductos()
        {
            var list = ListarProductos();
            gridProductos.DataSource = list;

        }

        private void tsbprodNuevo_Click(object sender, EventArgs e)
        {
            HabilitarFormProductos();

            txtprodNombre.Text = "";
            txtprodPrecio.Text = "";

            swProductos[0] = true;
            swProductos[1] = false;
            swProductos[2] = false;

            tsbprodEditar.Enabled = false;
            tsbprodEliminar.Enabled = false;
            tsbprodGuardar.Enabled = true;
            tsbprodCancelar.Enabled = true;
        }

        private void tsbprodEditar_Click(object sender, EventArgs e)
        {
            HabilitarFormProductos();

            swProductos[0] = false;
            swProductos[1] = true;
            swProductos[2] = false;

            tsbprodGuardar.Enabled = true;
            tsbprodCancelar.Enabled = true;
        }

        private void tsbprodEliminar_Click(object sender, EventArgs e)
        {
            HabilitarFormProductos();

            swProductos[0] = false;
            swProductos[1] = false;
            swProductos[2] = true;

            tsbprodGuardar_Click(sender, e);
        }

        private void tsbprodGuardar_Click(object sender, EventArgs e)
        {
            decimal precio;
            if (Decimal.TryParse(txtprodPrecio.Text,out precio)) {
                if (swProductos.ElementAt(0))
                {
                    producto = new ProductoNegocio();

                    producto.setNombre(txtprodNombre.Text);
                    producto.setPrecio(precio);


                    if (producto.Guardar())
                    {
                        MessageBox.Show("Exito al Guardar", "Producto");
                    }
                    else
                    {
                        MessageBox.Show("Error al Guardar", "Producto");
                    }
                }
                else if (swProductos.ElementAt(1))
                {
                    int codigo = Int32.Parse(txtempCodigo.Text);
                    string Nombre = txtprodNombre.Text;

                    if (producto.Actualizar(codigo, Nombre, precio))
                    {
                        MessageBox.Show("Exito al Actualizar", "Producto");
                    }
                    else
                    {
                        MessageBox.Show("Error al Actualizar", "Producto");
                    }
                }
                else if (swProductos.ElementAt(2))
                {
                    int codigo = Int32.Parse(txtprodCodigo.Text);

                    if (empleado.Eliminar(codigo))
                    {
                        MessageBox.Show("Exito al Eliminar", "Producto");
                    }
                    else
                    {
                        MessageBox.Show("Error al Eliminar", "Producto");
                    }
                }

                var list = ListarProductos();
                gridProductos.DataSource = list;

                DeshabilitarFormProductos();
            }
        }

        private void tsbprodCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormProductos();
            tsbprodEditar.Enabled = false;
            tsbprodEliminar.Enabled = false;
        }
        //---------------------Inventario------------------------------------------------

        InventarioNegocio inventario;
        List<bool> swInventario = new List<bool>() { false, false, false };

        private void DeshabilitarFormInventario()
        {
            txtinvCodigo.Enabled = false;
            txtinvCantidad.Enabled = false;
            cbbinvProducto.Enabled = false;
            dttinvFechaVencimiento.Enabled = false;
            dttinvFechaFabricacion.Enabled = false;

            tsbinvCancelar.Enabled = false;
            tsbinvGuardar.Enabled = false;

            swInventario[0] = false;
            swInventario[1] = false;
            swInventario[2] = false;
        }

        private void HabilitarFormInventario()
        {
            if (swProductos.ElementAt(0))
            {
                txtinvCantidad.Enabled = true;
                cbbinvProducto.Enabled = true;
                dttinvFechaVencimiento.Enabled = true;
                dttinvFechaFabricacion.Enabled = true;
            }
            else if (swProductos.ElementAt(1))
            {
                dttinvFechaVencimiento.Enabled = true;
                dttinvFechaFabricacion.Enabled = true;
            }
            else if (swProductos.ElementAt(2))
            {
                //txtparValor.Enabled = true;
            }
        }

        private List<dynamic> ListarInventario()
        {
            List<dynamic> result = new List<dynamic>();
            var list = inventario.Listar();

            foreach (var item in list)
            {
                result.Add(new { Codigo = item.invCodigo, Producto = item.invProducto, Cantidad = item.invCantidad, FechaFabricacion = item.invFechaFabricacion, FechaVencimiento = item.invFechaVencimiento});
            }

            return result;
        }

        private void CargarFormularioInventario()
        {
            var list = ListarInventario();
            gridInventario.DataSource = list;

        }

        private void tsbinvNuevo_Click(object sender, EventArgs e)
        {
            HabilitarFormInventario();

            txtinvCodigo.Text = "0";
            txtinvCantidad.Text = "0";
            cbbinvProducto.SelectedIndex = 0;
            dttinvFechaFabricacion.Value = DateTime.Now.Date;
            dttinvFechaVencimiento.Value = DateTime.Now.Date;

            swInventario[0] = true;
            swInventario[1] = false;
            swInventario[2] = false;

            tsbinvEditar.Enabled = false;
            tsbinvEliminar.Enabled = false;
            tsbinvGuardar.Enabled = true;
            tsbinvCancelar.Enabled = true;
        }

        private void tsbinvEditar_Click(object sender, EventArgs e)
        {
            HabilitarFormInventario();

            swInventario[0] = false;
            swInventario[1] = true;
            swInventario[2] = false;

            tsbinvGuardar.Enabled = true;
            tsbinvCancelar.Enabled = true;
        }

        private void tsbinvEliminar_Click(object sender, EventArgs e)
        {
            HabilitarFormInventario();

            swInventario[0] = false;
            swInventario[1] = false;
            swInventario[2] = true;

            tsbinvGuardar_Click(sender, e);
        }

        private void tsbinvGuardar_Click(object sender, EventArgs e)
        {
            if (swInventario.ElementAt(0))
            {
                producto = new ProductoNegocio();

                string s = cbbinvProducto.SelectedValue.ToString();
                inventario.setProducto(Int32.Parse(s));
                inventario.setCantidad(Int32.Parse(txtinvCantidad.Text));
                inventario.setFechaFabricacion(dttinvFechaFabricacion.Value);
                inventario.setFechaVencimiento(dttinvFechaVencimiento.Value);



                if (inventario.Guardar())
                {
                    MessageBox.Show("Exito al Guardar", "Inventario");
                }
                else
                {
                    MessageBox.Show("Error al Guardar", "Inventario");
                }
            }
            else if (swInventario.ElementAt(1))
            {
                int codigo = Int32.Parse(txtinvCodigo.Text);
                int producto = Int32.Parse(cbbinvProducto.SelectedValue.ToString());
                int cantidad = Int32.Parse(txtinvCantidad.Text);
                DateTime dtFechaFabricacion = dttinvFechaFabricacion.Value;
                DateTime dtFechaVencimiento = dttinvFechaVencimiento.Value;

                if (inventario.Actualizar(codigo,producto,cantidad,dtFechaFabricacion,dtFechaVencimiento))
                {
                    MessageBox.Show("Exito al Actualizar", "Inventario");
                }
                else
                {
                    MessageBox.Show("Error al Actualizar", "Inventario");
                }
            }
            else if (swInventario.ElementAt(2))
            {
                int codigo = Int32.Parse(txtinvCodigo.Text);

                if (empleado.Eliminar(codigo))
                {
                    MessageBox.Show("Exito al Eliminar", "Inventario");
                }
                else
                {
                    MessageBox.Show("Error al Eliminar", "Inventario");
                }
            }

            var list = ListarInventario();
            gridInventario.DataSource = list;

            DeshabilitarFormInventario();
        }

        private void tsbinvCancelar_Click(object sender, EventArgs e)
        {
            DeshabilitarFormInventario();
            tsbinvEditar.Enabled = false;
            tsbinvEliminar.Enabled = false;
        }
    }
}